//
//  MainTabBarController.swift
//  DSWeiBo
//
//  Created by H on 16/4/10.
//  Copyright © 2016年 Mr.Lin. All rights reserved.
//

import UIKit

class MainTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //设置当前控制器对应tabbar的颜色
        tabBar.tintColor = UIColor.orangeColor()
        
        
      //添加子控制器 
    //
        addChildViewController()
        
//        print(tabBar.items)
    
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
//        print("_______________>")
//        print(tabBar.items)
        //添加加号按钮
        setupComposeBtn()
    }
    /**
     监听加号按钮的点击 
     监听按钮点击的方法不能是私有方法
     */
    //MARK: - 内部控制方法
    func composeBtnClick() {
        
        print(#function)
        
    }
    
    private func setupComposeBtn(){
        
        //1.添加加号按钮
        tabBar.addSubview(composeBtn)
        //2.调用加号按钮的位置
        let width = UIScreen.mainScreen().bounds.size.width / CGFloat(viewControllers!.count)
        //let height = UIScreen.mainScreen().bounds.size.height
        let rect = CGRect(x:0,y:0,width: width,height: 49)
//        composeBtn.frame = rect
        //第一个参数是frame的大小  第二个参数是x方向偏移的大小  第三个参数是y方向偏移的大小
        composeBtn.frame = CGRectOffset(rect, 2 * width, 0)
        
    }
    
    private func addChildViewController() {
        //1.获取json文件的路径
        let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
        //2.通过文件路径创建NSData
        if let jsonPath = path{
            let jsonData = NSData(contentsOfFile: jsonPath)
            
            do{
                //有可能发生异常的代码放在这里
                //3.序列化json数据 --》NSArray
                //try： 发生异常会跳到catch中继续执行
                // try！：发生异常就会直接崩溃
                let dicArr = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
//                print(dicArr)
                //4.遍历数组 动态创建控制器和设置数据 在swift中 如果需要遍历一个数组 必须明确数组的类型
                for dict  in dicArr  as! [[String : String]] {
                    //报错的原因是因为addChildViewController参数必须有值 但是字典返回值是可选类型
                    addChildViewController(dict["vcName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
                }
                
            }catch{
                //发生异常之前会执行的代码
                
                print(error)
                
                addChildViewController("HomeTableViewController", title: "首页", imageName: "tabbar_home")
                addChildViewController("MessageTableViewController", title: "消息", imageName: "tabbar_message_center")
                //再添加一个占位控制器
                addChildViewController("NullViewController", title: "", imageName: "tabbar_message_center")
                
                addChildViewController("DiscoverTableViewController", title: "广场", imageName: "tabbar_discover")
                addChildViewController("CommonTableViewController", title: "我", imageName: "tabbar_profile")
                
                
                
                
            }
            
            
        }
        
    }
    
    /**
     初始化子控制器
     
     - parameter childController: 需要初始化的子控制器
     - parameter title:           子控制器的标题
     - parameter iamgeName:       子控制器的图片
     */
//    private func addChildViewController(childController: UIViewController,title:String, imageName:String) {
    private func addChildViewController(childControllerName: String,title:String, imageName:String) {

//        <DSWeiBo.HomeTableViewController: 0x12cdad3e0>
        
        
        
        //0. 将字符串转换为类
        //命名空间默认情况下就是项目的名称  但是命名空间是可以修改的 
        
        let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String

        //0.1 将字符串转换为类
        let cls:AnyClass? = NSClassFromString(ns + "." + childControllerName)
//        print(cls)
        //0.2通过类创建一个对象
        //0.2.1 将AnyClass 转换为指定的类型
        let vcCls = cls as! UIViewController.Type
        //0.2.2 通过vcCls创建对象
        let vc = vcCls.init()
        
//        print(vc)
        //1. 设置首页对应的数据
        
        
      //1.创建首页
        //1.1设置首页tabbar对应的数据
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: "\(imageName)+_highlighted")
        //    home.tabBarItem.title = "首页"
        //    home.navigationItem.title = "首页"
        vc.title = title
        //2.给首页也装一个导航控制器
        
        let nav = UINavigationController()
        nav.addChildViewController(vc)
        
        addChildViewController(nav)
  
    }
    
    
    //MARK : 懒加载

    private lazy var composeBtn:UIButton = {
       
        let btn = UIButton()
        //2.设置前景图片
        btn.setImage(UIImage(named:"tabbar_compose_icon_add"), forState: UIControlState.Normal)
        btn.setImage(UIImage(named:"tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        //3.设置背景图片
        btn.setBackgroundImage(UIImage(named:"tabbar_compose_button"), forState: UIControlState.Normal)
        btn.setBackgroundImage(UIImage(named:"tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
        
        //4. 添加监听
        btn.addTarget(self, action: #selector(MainTabBarController.composeBtnClick), forControlEvents: UIControlEvents.TouchUpInside)
        
        return btn
    }()
}

